import axios from 'axios'
import store from '@/store'
import { Toast, Dialog } from 'vant'

// create an axios instance
const request = axios.create({
    baseURL: 'http://zdims.test:81', // api的base_url
    timeout: 10000 // request timeout
})

// request interceptor
request.interceptors.request.use(config => {
    // Do something before request is sent
    if (store.getters.token) {
        // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
        config.headers['Authorization'] = `Bearer ${store.getters.token}`
    }
    config.headers['X-Requested-With'] = 1
    config.withCredentials = true   // 跨域时发送带凭证的请求
    console.log(config)
    return config
}, error => {
    // Do something with request error
    console.log(error) // for debug
    Promise.reject(error)
})

// respone interceptor
request.interceptors.response.use(
  // response => response,
  /**
   * 下面的注释为通过在response里，自定义code来标示请求状态
   * 当code返回如下情况则说明权限有问题，登出并返回到登录页
   * 如想通过xmlhttprequest来状态码标识 逻辑可写在下面error中
   * 以下代码均为样例，请结合自生需求加以修改，若不需要，则可删除
   */
  response => {
      const res = response.data

      if (res.code != 0) {
          // Message({
          //   message: res.message,
          //   type: 'error',
          //   duration: 5 * 1000
          // })
          // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
          if (res.code === '50008' || res.code === '50012' || res.code === '50014') {
              // MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
              //   confirmButtonText: '重新登录',
              //   cancelButtonText: '取消',
              //   type: 'warning'
              // }).then(() => {
              //   store.dispatch('FedLogOut').then(() => {
              //     location.reload() // 为了重新实例化vue-router对象 避免bug
              //   })
              // })
              store.dispatch('ToLogin').then(() => {})
          }
          let error = new Error(res.message)
          error.code = res.code
          return Promise.reject(error)
      } else {
          // return response.data
          return Promise.resolve(response)
      }
  },
  error => {
      console.log('err' + error) // for debug
      // Message({
      //   message: error.errMsg,
      //   type: 'error',
      //   duration: 5 * 1000
      // })
      if (error.response.status == 422) {
          let message = '提交数据不正确'
          if (error.response.data) {
              message = error.response.data.message
              Toast(message)
          }
      } else if (error.response.status == 401) {
          Dialog.confirm({
              title: '登录提醒',
              message: '您还未登录，是否前往登录?',
          }).then(() => {
              store.dispatch('ToLogin').then(() => {})
          }).catch(() => {});
      }
      return Promise.reject(error)
  })

export default request
